#ifndef ABSTRACTION_H
#define ABSTRACTION_H
#include <memory>
#include "Implementation.h"
class Abstraction{
public:
    Abstraction(){}
    ~Abstraction(){}
public:
    virtual void operation()=0;
};
class RefinedAbstraction:public Abstraction{
public:
    RefinedAbstraction(std::shared_ptr<Implementation>impl):m_impl(impl){

    }
    ~RefinedAbstraction(){}
    void operation() override{
        m_impl->implementationOperation();
    }
private:
   std::shared_ptr<Implementation> m_impl;
};
#endif // ABSTRACTION_H
